package leetcode;

public class _21_MergeTwoSortedLists {
    public static void main(String[] args) {
        _21_MergeTwoSortedLists c = new _21_MergeTwoSortedLists();
        _21_MergeTwoSortedLists.Solution s = c.getSolution();
        _21_MergeTwoSortedLists.ListNode listNode = c.getListNode(1);
        _21_MergeTwoSortedLists.ListNode temp = listNode;
        listNode.next = c.getListNode(2);
        temp = temp.next;
        temp.next = c.getListNode(4);
        temp = temp.next;
        temp.next = c.getListNode(5);
//        ((ListNode)listNode.next).next = c.getListNode(4);
        _21_MergeTwoSortedLists.ListNode listNode1 = c.getListNode(1);
        listNode1.next = c.getListNode(3);
        listNode1.next.next = c.getListNode(4);
//        while (listNode != null ) {
//            System.out.println(listNode.val);
//            listNode = listNode.next;
//        }
//
//        while (listNode1 != null ) {
//            System.out.println(listNode1.val);
//            listNode1 = listNode1.next;
//        }
        System.out.println("res:");
        _21_MergeTwoSortedLists.ListNode res = s.mergeTwoLists(listNode, listNode1);
        while (res != null) {
            System.out.println(res.val);
            res = res.next;
        }
    }

    Solution getSolution() {
        return new Solution();
    }

    ListNode getListNode() {
        return new ListNode(0);
    }

    ListNode getListNode(int x) {
        return new ListNode(x);
    }

    class ListNode {
        int val;
        ListNode next;

        ListNode(int x) {
            val = x;
        }
    }

    class Solution {
        public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
            ListNode temp = new ListNode(0);
            ListNode head = new ListNode(0);
            if (l1 == null) {
                return l2;
            }
            if (l2 == null) {
                return l1;
            }
            if (l1.val < l2.val) {
                head = l1;
                l1 = l1.next;
            } else {
                head = l2;
                l2 = l2.next;
            }
            temp = head;
            while (l1 != null && l2 != null) {
                if (l1.val < l2.val) {
                    temp.next = l1;
                    l1 = l1.next;
                    temp = temp.next;
                } else {
                    temp.next = l2;
                    l2 = l2.next;
                    temp = temp.next;
                }
            }
            if (l1 != null) {
                temp.next = l1;
            }
            if (l2 != null) {
                temp.next = l2;
            }
            return head;
        }
    }
}
